/**
 * file :	log.h
 * author :	bushaofeng
 * created :	2013-02-07 16:30
 * func : 
 */

#ifndef	__LOG_H_
#define	__LOG_H_

#include <stdarg.h>
#include "bs_log.h"

class Log{
    public:
    Log(const char* path){
        int res;
        if((res=bs_log_init(&m_log, path))!= BS_SUCCESS){
            fprintf(stderr, "INIT LOG[%s] ERROR[%d]\n", path, res);
            fflush(stderr);
        }
    }
    ~Log(){
        bs_log_close(&m_log);
    }

    /**
     * 定义log级别
     */
    void set(int log, bool flag){
        bs_log_set(&m_log, log, flag);
    }
    /**
     * 批量定义log级别
     */
    void setflag(const int* flag, size_t size){
        bs_log_setflag(&m_log, flag, size);
    }

    void log(int log, const char fmt[], ...){
        char    buf[10*BS_LONG_STRLEN];
        va_list va;

        va_start(va, fmt);
        vsnprintf(buf, 10*BS_LONG_STRLEN, fmt, va);
        bs_log(&m_log, log, buf);
        va_end(va);
    }

    void debug(const char fmt[], ...){
        char    buf[10*BS_LONG_STRLEN];
        va_list va;

        va_start(va, fmt);
        vsnprintf(buf, 10*BS_LONG_STRLEN, fmt, va);
        bs_log(&m_log, LOG_DEBUG, buf);
        va_end(va);
    }
    void info(const char fmt[], ...){
        char    buf[10*BS_LONG_STRLEN];
        va_list va;

        va_start(va, fmt);
        vsnprintf(buf, 10*BS_LONG_STRLEN, fmt, va);
        bs_log(&m_log, LOG_INFO, buf);
        va_end(va);
    }
    void warning(const char fmt[], ...){
        char    buf[10*BS_LONG_STRLEN];
        va_list va;

        va_start(va, fmt);
        vsnprintf(buf, 10*BS_LONG_STRLEN, fmt, va);
        bs_log(&m_log, LOG_WARNING, buf);
        va_end(va);
    }
    void err(const char fmt[], ...){
        char    buf[10*BS_LONG_STRLEN];
        va_list va;

        va_start(va, fmt);
        vsnprintf(buf, 10*BS_LONG_STRLEN, fmt, va);
        bs_log(&m_log, LOG_ERR, buf);
        va_end(va);
    }

    private:
    bs_log_t    m_log;
};

#endif
